
import { api } from '../api/index'

export interface ReportData {
  '报告基本信息': {
    '报告编号': string
    '评价日期': string
    '矿山名称': string
    '矿山类型': string
    '所属区域': string
    '评价人': string
  }
  '矿山基本信息': {
    '信息项': {
      '矿山编号': string
      '矿山名称': string
      '所属区域': string
      '联系人': string
      '联系电话': string
      '矿山类型': string
      '备注': string
      '隶属企业': string
      '生产能力': string
      '服务年限': string
      '开拓方式': string
      '运输方式': string
    }
  }
  '生产系统信息'?: {
    [key: string]: {
      'system_name': string
      'function_description': string
      'main_facilities': string
      'operation_status': string
      'safety_hazards': string
    }
  }
  '安全指标评分与模型计算': Array<{
    '序号': number
    '指标名称': string
    '指标值': number
    '权重': number
  }>
  '安全等级判定': {
    '总体安全等级': string
    '综合得分': number
    '低分指标数量': number
    '建议整改指标': string
  }
  '整改建议': Array<{
    '指标名称': string
    '建议内容': string
    '整改条件': string
  }>
  '报告元数据': {
    '生成时间': string
    '算法版本': string
    '报告格式': string
    '数据来源': string
    '阈值设定': string
  }
}

export interface ReportExportOptions {
  filename?: string
  format?: 'pdf' | 'json'
  includeCharts?: boolean
}

/**
 * 报告服务类
 */
export class ReportService {
  /**
   * 根据评价ID生成完整报告数据
   * @param evaluationId 评价记录ID
   * @returns 完整的报告数据
   */
  static async generateReportData(evaluationId: number): Promise<ReportData> {
    try {
      const response = await api.evaluation.generateSafetyReport(evaluationId)
      
      if (!response.success) {
        throw new Error(response.error || '生成报告数据失败')
      }
      
      // 获取原始数据
      const rawData = response.data
      
      // 获取评价详情以获取完整的矿山基本信息
      const detailResponse = await api.evaluation.detail(evaluationId)
      if (!detailResponse.success) {
        throw new Error('获取评价详情失败')
      }
      
      const evaluationDetail = detailResponse.data
      
      // 构建完整的报告数据
      // 确保报告编号使用数据库中的evaluation_id
      const reportData: ReportData = {
        '报告基本信息': {
          ...rawData['报告基本信息'],
          '报告编号': evaluationDetail.evaluation_id || rawData['报告基本信息']['报告编号']
        },
        '矿山基本信息': {
          '信息项': {
            ...rawData['矿山基本信息']['信息项'],
            '隶属企业': evaluationDetail.affiliated_enterprise || '待补充',
            '生产能力': evaluationDetail.production_capacity?.toString() || '待补充',
            '服务年限': evaluationDetail.service_life?.toString() || '待补充',
            '开拓方式': this.formatDevelopmentMethods(evaluationDetail.development_methods),
            '运输方式': this.formatTransportMethod(evaluationDetail.transport_method)
          }
        },
        '生产系统信息': evaluationDetail.production_systems || {},
        '安全指标评分与模型计算': rawData['安全指标评分与模型计算'],
        '安全等级判定': {
          ...rawData['安全等级判定'],
          // 使用数据库中的真实安全等级，确保与数据库存储一致
          '总体安全等级': evaluationDetail.safety_level || rawData['安全等级判定']['总体安全等级'],
          '综合得分': evaluationDetail.comprehensive_score || rawData['安全等级判定']['综合得分']
        },
        '整改建议': rawData['整改建议'],
        '报告元数据': rawData['报告元数据']
      }
      
      return reportData
    } catch (error) {
      console.error('生成报告数据失败:', error)
      throw new Error('生成报告数据失败，请重试')
    }
  }

  /**
   * 格式化开拓方式
   */
  private static formatDevelopmentMethods(methods: string[]): string {
    if (!methods || methods.length === 0) {
      return '待补充'
    }
    
    const methodMapping: { [key: string]: string } = {
      'inclined_shaft': '斜井',
      'vertical_shaft': '立井',
      'adit': '平硐'
    }
    
    return methods.map(method => methodMapping[method] || method).join('、')
  }

  /**
   * 格式化运输方式
   */
  private static formatTransportMethod(method: string): string {
    if (!method) {
      return '待补充'
    }
    
    const methodMapping: { [key: string]: string } = {
      'electric_locomotive': '电机车运输',
      'belt_conveyor': '带式运送机运输'
    }
    
    return methodMapping[method] || method
  }

  /**
   * 导出报告为PDF格式 (通过浏览器打印)
   * @param reportData 报告数据
   * @param options 导出选项
   */
  static async exportToPDF(reportData: ReportData, options: ReportExportOptions = {}): Promise<void> {
    try {
      // 使用新窗口方法预览并允许用户打印
      await this.previewAndPrintInNewWindow(reportData, options)
    } catch (error) {
      console.error('PDF导出预览失败:', error)
      throw new Error('无法打开打印预览窗口，请检查浏览器设置或重试')
    }
  }

  /**
   * 在新窗口中预览报告并自动调用打印
   * @param reportData 报告数据
   * @param options 导出选项
   */
  private static async previewAndPrintInNewWindow(reportData: ReportData, options: ReportExportOptions = {}): Promise<void> {
    // 生成完整的HTML文档
    const fullHtmlDocument = this.generateCompleteHTMLDocument(reportData)
    
    // 验证HTML文档完整性
    if (!this.validateHTMLDocument(fullHtmlDocument)) {
      throw new Error('生成的HTML文档格式不正确')
    }
    
    // 创建新的窗口来避免样式干扰
    const newWindow = window.open('', '_blank', 'width=1000,height=800')
    if (!newWindow) {
      throw new Error('无法打开新窗口，请检查浏览器弹窗设置')
    }
    
    // 写入HTML内容到新窗口
    newWindow.document.write(fullHtmlDocument)
    newWindow.document.close()
    
    // 等待新窗口内容完全加载和渲染
    await this.waitForPageRender(newWindow.document)
    
    // 延迟一点时间确保图片等资源加载完毕，然后调用打印
    setTimeout(() => {
        newWindow.focus()
        newWindow.print()
    }, 500)
  }

  /**
   * 备用PDF导出方法（已废弃，保留接口兼容性）
   */
  static async exportToPDFFallback(reportData: ReportData, options: ReportExportOptions = {}): Promise<void> {
      return this.exportToPDF(reportData, options)
  }

  /**
   * 导出报告为JSON格式
   * @param reportData 报告数据
   * @param filename 文件名
   */
  static exportToJSON(reportData: ReportData, filename?: string): void {
    try {
      const dataStr = JSON.stringify(reportData, null, 2)
      const dataBlob = new Blob([dataStr], { type: 'application/json' })
      const url = URL.createObjectURL(dataBlob)
      
      const link = document.createElement('a')
      link.href = url
      link.download = filename || `${reportData['报告基本信息']['报告编号']}_安全评价报告.json`
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link)
      URL.revokeObjectURL(url)
      
    } catch (error) {
      console.error('JSON导出失败:', error)
      throw new Error('JSON导出失败，请重试')
    }
  }

  /**
   * 生成完整的HTML文档
   * @param reportData 报告数据
   * @returns 完整的HTML文档字符串
   */
  private static generateCompleteHTMLDocument(reportData: ReportData): string {
    const reportInfo = reportData['报告基本信息']
    const mineInfo = reportData['矿山基本信息']['信息项']
    
    return `<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>${reportInfo['矿山名称']}安全评价报告</title>
    <style>
        ${this.getCompleteCSSStyles()}
    </style>
</head>
<body>
    <div class="print-controls">
        <button onclick="window.print()" class="print-btn">打印 / 保存为PDF</button>
    </div>
    ${this.generateCoverPage(reportInfo, mineInfo)}
    ${this.generateContentPage(reportData)}
</body>
</html>`
  }

  /**
   * 等待页面完全渲染
   * @param doc 文档对象
   * @param timeout 超时时间（毫秒）
   * @returns Promise<void>
   */
  private static async waitForPageRender(doc: Document, timeout: number = 10000): Promise<void> {
    return new Promise<void>((resolve, reject) => {
      const startTime = Date.now()
      
      const checkRenderComplete = () => {
        // 检查是否超时
        if (Date.now() - startTime > timeout) {
          reject(new Error('页面渲染超时'))
          return
        }
        
        // 检查DOM是否完全加载
        if (doc.readyState === 'complete') {
          // 检查关键元素是否存在
          const coverPage = doc.querySelector('.cover-page')
          const contentPage = doc.querySelector('.content-page')
          
          if (coverPage && contentPage) {
             resolve()
             return
          }
        }
        
        // 继续检查
        setTimeout(checkRenderComplete, 100)
      }
      
      // 开始检查
      checkRenderComplete()
    })
  }

  /**
   * 验证HTML文档完整性
   * @param htmlString HTML字符串
   * @returns 是否有效
   */
  private static validateHTMLDocument(htmlString: string): boolean {
    try {
      // 检查基本HTML结构
      const hasDoctype = htmlString.includes('<!DOCTYPE html>')
      const hasHtmlTag = htmlString.includes('<html')
      const hasHeadTag = htmlString.includes('<head>')
      const hasBodyTag = htmlString.includes('<body>')
      const hasClosingTags = htmlString.includes('</html>')
      
      return hasDoctype && hasHtmlTag && hasHeadTag && hasBodyTag && hasClosingTags
    } catch (error) {
      console.error('HTML验证失败:', error)
      return false
    }
  }

  /**
   * 获取完整的CSS样式
   * @returns CSS样式字符串
   */
  private static getCompleteCSSStyles(): string {
    return `
        @page {
            size: A4;
            margin: 0;
        }
        
        body {
            margin: 0;
            padding: 0;
            font-family: 'Microsoft YaHei', Arial, sans-serif;
            font-size: 12px;
            line-height: 1.4;
            color: #333;
            background: white;
        }

        .print-controls {
            position: fixed;
            top: 20px;
            right: 20px;
            z-index: 9999;
        }

        .print-btn {
            padding: 10px 20px;
            background: #3498db;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 14px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.2);
        }

        .print-btn:hover {
            background: #2980b9;
        }
        
        /* 封面样式 */
        .cover-page {
            width: 210mm;
            height: 297mm;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            text-align: center;
            page-break-after: always;
            background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
            position: relative;
            box-sizing: border-box;
        }
        
        .cover-title {
            font-size: 36px;
            font-weight: bold;
            color: #2c3e50;
            margin-bottom: 20px;
            text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
            line-height: 1.2;
        }
        
        .cover-subtitle {
            font-size: 18px;
            color: #6c757d;
            margin-bottom: 60px;
            font-weight: 500;
        }
        
        .cover-info {
            position: absolute;
            bottom: 80px;
            left: 50%;
            transform: translateX(-50%);
            font-size: 14px;
            color: #495057;
            line-height: 2;
            text-align: left;
            background: rgba(255, 255, 255, 0.9);
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 4px 15px rgba(0,0,0,0.1);
        }
        
        .cover-info div {
            margin-bottom: 8px;
        }
        
        .cover-info strong {
            color: #2c3e50;
        }
        
        /* 内容页样式 */
        .content-page {
            width: 210mm;
            min-height: 297mm;
            padding: 20mm;
            box-sizing: border-box;
        }
        
        .section {
            margin-bottom: 25px;
            background: #f8f9fa;
            border-radius: 8px;
            padding: 15px;
            border: 1px solid #e9ecef;
        }
        
        .section h2 {
            color: #2c3e50;
            margin-bottom: 15px;
            font-size: 18px;
            font-weight: 600;
            border-bottom: 2px solid #3498db;
            padding-bottom: 8px;
        }
        
        .info-table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 15px;
            background: white;
            border-radius: 8px;
            overflow: hidden;
        }
        
        .info-table td {
            padding: 8px 12px;
            border: 1px solid #dee2e6;
            font-size: 12px;
        }
        
        .info-table td:first-child {
            background: #f8f9fa;
            font-weight: 600;
            color: #495057;
            width: 120px;
        }
        
        .safety-level-display {
            text-align: center;
            margin: 20px 0;
        }
        
        .safety-level-badge {
            display: inline-block;
            padding: 15px 30px;
            border-radius: 8px;
            font-size: 24px;
            font-weight: bold;
            color: white;
            background: #dc3545;
        }
        
        .safety-level-badge.level-a {
            background: #28a745;
        }
        
        .safety-level-badge.level-b {
            background: #17a2b8;
        }
        
        .safety-level-badge.level-c {
            background: #ffc107;
            color: #212529;
        }
        
        .safety-level-badge.level-d {
            background: #dc3545;
        }
        
        .indicators-table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 15px;
            font-size: 10px;
            background: white;
            border-radius: 8px;
            overflow: hidden;
        }
        
        .indicators-table th {
            background: #3498db;
            color: white;
            padding: 8px 6px;
            text-align: center;
            font-weight: 600;
        }
        
        .indicators-table td {
            padding: 6px 4px;
            border: 1px solid #dee2e6;
            text-align: center;
            font-size: 10px;
        }
        
        .indicators-table .low-score {
            background: #fff3cd;
            color: #856404;
            font-weight: bold;
        }
        
        .remediation-item {
            margin-bottom: 15px;
            padding: 12px;
            border: 1px solid #dee2e6;
            border-left: 4px solid #dc3545;
            background: #f8f9fa;
            border-radius: 4px;
        }
        
        .remediation-header {
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 8px;
            font-size: 13px;
        }
        
        .remediation-condition {
            color: #6c757d;
            font-size: 11px;
            margin-bottom: 6px;
        }
        
        .remediation-content {
            color: #495057;
            line-height: 1.5;
            font-size: 11px;
        }
        
        h3 {
            color: #2c3e50;
            font-size: 16px;
            font-weight: 600;
            margin: 20px 0 15px 0;
            border-bottom: 1px solid #dee2e6;
            padding-bottom: 5px;
        }
        
        h4 {
            color: #34495e;
            font-size: 14px;
            font-weight: 600;
            margin: 15px 0 10px 0;
        }
        
        p {
            margin-bottom: 12px;
            line-height: 1.6;
            text-align: justify;
        }
        
        ol, ul {
            margin-bottom: 15px;
            padding-left: 20px;
        }
        
        ol li, ul li {
            margin-bottom: 8px;
            line-height: 1.5;
        }
        
        strong {
            color: #2c3e50;
            font-weight: 600;
        }
        
        .safety-level-table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-size: 12px;
        }
        
        .safety-level-table th,
        .safety-level-table td {
            border: 1px solid #dee2e6;
            padding: 8px 12px;
            text-align: left;
        }
        
        .safety-level-table th {
            background-color: #f8f9fa;
            font-weight: 600;
            color: #495057;
        }
        
        .safety-level-table tbody tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .safety-level-table tbody tr:hover {
            background-color: #e9ecef;
        }
        
        /* 打印样式 */
        @media print {
            body {
                -webkit-print-color-adjust: exact;
                print-color-adjust: exact;
            }
            
            .print-controls {
                display: none;
            }
            
            .cover-page {
                page-break-after: always;
                height: 100vh; /* 强制填满一页 */
            }
            
            .section {
                page-break-inside: avoid;
            }
        }
    `
  }

  /**
   * 生成封面页HTML
   */
  private static generateCoverPage(reportInfo: any, _mineInfo: any): string {
    return `
    <!-- 封面页 -->
    <div class="cover-page">
        <div class="cover-title"><u>${reportInfo['矿山名称']}</u>安全评价报告</div>
        <div class="cover-subtitle">基于AHP-MIV-BP模型</div>
        <div class="cover-info">
            <div><strong>报告编号：</strong><u>${reportInfo['报告编号']}</u></div>
            <div><strong>评价日期：</strong><u>${reportInfo['评价日期']}</u></div>
            <div><strong>矿山名称：</strong><u>${reportInfo['矿山名称']}</u></div>
            <div><strong>矿山类型：</strong><u>${reportInfo['矿山类型']}</u></div>
            <div><strong>所属区域：</strong><u>${reportInfo['所属区域']}</u></div>
            <div><strong>评价人：</strong><u>${reportInfo['评价人']}</u></div>
        </div>
    </div>`
  }

  /**
   * 生成内容页HTML
   */
  private static generateContentPage(reportData: ReportData): string {
    const reportInfo = reportData['报告基本信息']
    const mineInfo = reportData['矿山基本信息']['信息项']
    const safetyGrading = reportData['安全等级判定']
    const remediation = reportData['整改建议']
    const indicators = reportData['安全指标评分与模型计算']
    
    return `
    <!-- 内容页 -->
    <div class="content-page">
      <!-- 评价范围与依据 -->
      <div class="section">
        <h2>1 评价范围与依据</h2>
        
        <h3>1.1 评价范围</h3>
        <p>本次安全评价以 <strong><u>${reportInfo['矿山名称']}</u></strong> 为对象，依据《金属非金属矿山安全规程》《煤矿安全规程》及相关行业标准，结合AHP-MIV-BP综合评价模型，对矿山生产系统的主要安全要素进行系统化定量分析。</p>
        
        <p>评价范围覆盖矿山安全生产的 <strong>人员、设备、通风与地质环境、管理与应急体系</strong> 四大领域，共计15项核心指标，具体如下：</p>
        
        <h4>（一）人员因素评价范围</h4>
        <p>重点考察作业人员与管理人员的安全行为与管理能力：</p>
        <ol>
          <li><strong>工人的安全意识与操作能力</strong>：通过安全培训记录、现场抽查与违章率数据，评估职工安全意识水平及规范操作能力；</li>
          <li><strong>管理人员的管理能力</strong>：分析管理层对安全生产责任制的执行情况、安全检查计划落实率及安全投入保障能力。</li>
        </ol>
        
        <h4>（二）设备因素评价范围</h4>
        <p>主要包括矿井生产装备、运输设施及供排系统的完好率与可靠性：</p>
        <ol start="3">
          <li><strong>采掘设备完好率</strong>：检查采煤、掘进设备的检修周期、完好状态及维护记录；</li>
          <li><strong>矿井通风设备完好率</strong>：核查主扇、局扇等通风设备运行情况及防爆性能；</li>
          <li><strong>瓦斯监测设备完好率</strong>：评估瓦斯检测系统的完备性、灵敏度及数据采集稳定性；</li>
          <li><strong>防火及消防设施完好率</strong>：对井下灭火装置、喷淋系统、消防管路完好性进行检测；</li>
          <li><strong>井下排水设备完好率</strong>：检查水仓、排水泵及监控装置的运行稳定性与冗余保障能力；</li>
          <li><strong>矿井提升设备完好率</strong>：包括提升绞车、信号系统及防坠装置的安全性能；</li>
          <li><strong>供电系统设备完好率</strong>：重点检查供电线路、电气保护装置及防爆电器完好程度。</li>
        </ol>
        
        <h4>（三）通风与地质环境因素评价范围</h4>
        <p>主要反映矿井自然条件与安全技术保障状况：</p>
        <ol start="10">
          <li><strong>风量供需比</strong>：计算实际供风量与理论需求量之比，评价通风系统合理性与防灾能力；</li>
          <li><strong>顶板管理难易程度</strong>：根据地质构造、岩层特征及支护工艺综合判断顶板稳定性；</li>
          <li><strong>煤层自燃发火倾向性</strong>：通过煤样分析与实测指标评估煤层自燃危险程度。</li>
        </ol>
        
        <h4>（四）管理与应急体系评价范围</h4>
        <p>从安全管理制度执行与应急保障角度进行综合评价：</p>
        <ol start="13">
          <li><strong>安全管理制度及落实率</strong>：考察安全管理制度的健全程度、责任落实率与执行效果；</li>
          <li><strong>应急响应机制完善率</strong>：包括应急预案制定、演练执行及救援资源配置水平；</li>
          <li><strong>安全检查整改落实率</strong>：分析安全隐患排查、整改闭环和复查制度的落实情况。</li>
        </ol>
        
        <p>本次评价以矿井的<strong>人、机、环、管</strong>四个维度为主线，依据采集的生产运行数据、管理指标及专家评分结果，利用AHP-MIV-BP安全评价模型对矿山整体安全水平进行综合评价。</p>
        
        <h3>1.2 评价依据</h3>
        <p>本次安全评价遵循国家有关矿山安全生产的法律、法规、技术标准及行业规范，综合采用层次分析法（AHP）、最小影响值法（MIV）与BP神经网络模型相结合的综合评价方法。评价依据主要包括以下四个方面：</p>
        
        <h4>（一）法律法规依据</h4>
        <ul>
          <li>《中华人民共和国安全生产法》（2021年修订）</li>
          <li>《中华人民共和国矿山安全法》（2021年修订）</li>
          <li>《煤矿安全规程》（2022年版）</li>
          <li>《金属非金属矿山安全规程》（GB16423-2020）</li>
          <li>《生产经营单位安全培训规定》（应急管理部令第4号）</li>
          <li>《企业职工伤亡事故分类标准》（GB6441-2023）</li>
          <li>《矿山安全监控系统通用技术要求》（AQ6201-2019）</li>
          <li>《矿山安全生产标准化规范及考核标准》（煤矿部分）</li>
        </ul>
        <p>上述法规和标准为本次评价提供了安全管理、作业行为、设备设施与职业环境等方面的技术与制度依据。</p>
        
        <h4>（二）技术标准与规范依据</h4>
        <ul>
          <li>《AQ/T 3033-2020 矿山企业安全风险分级管控体系 通则》</li>
          <li>《AQ/T 3034-2021 矿山企业隐患排查治理体系规范》</li>
          <li>《GB/T 13861-2022 生产过程安全卫生要求总则》</li>
          <li>《GB/T 12801-2022 生产过程安全技术规范》</li>
          <li>《GB/T 15605-2019 职业安全健康管理体系 要求与使用指南》</li>
          <li>行业内部技术规范、企业管理制度及矿山设计文件</li>
        </ul>
        <p>这些技术规范为评价中的指标选取、风险定量化及安全水平分级提供了可操作性基础。</p>
        
        <h4>（三）数据与信息依据</h4>
        <ul>
          <li><strong>现场调查数据</strong>：包括设备完好率、通风量、排水能力、安全检查记录等实测数据；</li>
          <li><strong>企业管理资料</strong>：包括安全管理制度、培训记录、事故台账及隐患整改档案；</li>
          <li><strong>专家评分数据</strong>：由矿山安全专家及技术人员基于"人—机—环—管"四大维度进行量化打分；</li>
          <li><strong>历史运行数据</strong>：采掘、运输、通风、排水等系统的历史监控记录与运行状态。</li>
        </ul>
        
        <h4>（四）模型与方法依据</h4>
        <ul>
          <li><strong>层次分析法（AHP）</strong>：用于确定各安全指标的权重，建立"目标层—准则层—指标层"结构模型，反映各因素对安全水平的相对重要性；</li>
          <li><strong>最小影响值法（MIV）</strong>：通过扰动输入样本分析各特征对输出结果的敏感性，筛选出对安全等级影响显著的关键指标；</li>
          <li><strong>BP神经网络模型</strong>：在特征筛选基础上建立安全预测模型，利用训练样本进行非线性映射，实现安全等级的自动判别；</li>
          <li><strong>综合评价体系</strong>：将AHP、MIV与BP模型相结合，实现从指标赋权、特征筛选到安全等级预测的闭环分析过程，确保评价结果的科学性、客观性与可重复性。</li>
        </ul>
      </div>
      
      <!-- 建设项目概述 -->
      <div class="section">
        <h2>2 建设项目概述</h2>
        
        <h3>2.1 矿山概况</h3>
        <p>本矿山位于<strong><u>${reportInfo['所属区域']}</u></strong>，隶属于<strong><u>${mineInfo['隶属企业'] || '待补充'}</u></strong>，为一座<strong><u>${reportInfo['矿山类型']}</u></strong>生产矿山。矿区地质构造较为复杂，矿体埋藏深度较大，属<strong><u>中型</u></strong>矿山。矿山设计生产能力为<strong><u>${mineInfo['生产能力'] || '待补充'}</u>万吨/年</strong>，服务年限约<strong><u>${mineInfo['服务年限'] || '待补充'}</u>年</strong>。矿井开拓方式采用<strong><u>${mineInfo['开拓方式'] || '待补充'}</u></strong>结合布置，运输方式为<strong><u>${mineInfo['运输方式'] || '待补充'}</u></strong>。</p>
        
        <p>矿山在建设与生产过程中坚持"安全第一、预防为主、综合治理"的方针，建立了较为完善的安全管理体系和信息化监测系统。各生产系统运行稳定，为矿井安全高效生产提供了基础保障。</p>
        
        <h3>2.2 主要安全设施配置情况</h3>
        <p>矿山主要生产系统包括开采系统、通风系统、瓦斯防治系统、排水系统、提升运输系统、供电系统、防火防爆系统等，各系统功能及运行情况如下：</p>
        
        ${this.generateProductionSystemsContent(reportData['生产系统信息'])}
        
        <p>各系统协同运行，构成了矿山安全生产的核心支撑体系，为后续的安全评价与智能监控提供了基础数据和技术保障。</p>
      </div>
      
      <!-- 安全对策措施建议 -->
      <div class="section">
        <h2>3 安全对策措施建议</h2>
        <p>根据矿山安全设施符合性分析及现场检查结果，为进一步提升矿井安全管理水平，提出如下安全对策与改进措施：</p>
        
        <table class="info-table">
          <tr>
            <td style="width: 200px; font-weight: 600; background: #f8f9fa;">指标名称</td>
            <td style="font-weight: 600; background: #f8f9fa;">整改建议</td>
          </tr>
          ${this.generateRemediationTableRows(remediation)}
        </table>
      </div>
      
      <!-- 评价结论 -->
      <div class="section">
        <h2>4 评价结论</h2>
        <p>通过AHP-MIV-BP模型对<strong><u>${reportInfo['矿山名称']}</u></strong>的安全指标数据进行综合分析，模型输出安全等级<strong><u>${this.formatSafetyLevel(safetyGrading['总体安全等级'])}</u></strong>，对应安全等级划分结果如下：</p>
        
        <table class="safety-level-table">
          <thead>
            <tr>
              <th>安全等级</th>
              <th>安全状态</th>
              <th>等级说明</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>A</td>
              <td>安全</td>
              <td>生产系统稳定，安全管理完善</td>
            </tr>
            <tr>
              <td>B</td>
              <td>较安全</td>
              <td>存在部分改进空间，整体可控</td>
            </tr>
            <tr>
              <td>C</td>
              <td>较危险</td>
              <td>局部风险较高，需加强管理</td>
            </tr>
            <tr>
              <td>D</td>
              <td>危险</td>
              <td>安全隐患较多，需立即整改</td>
            </tr>
          </tbody>
        </table>
        
        <p>经分析，该矿井安全管理体系<u>${this.generateSafetyConclusion(safetyGrading['总体安全等级'], safetyGrading['综合得分'])}</u>。${this.generateSafetyRecommendation(safetyGrading['总体安全等级'])}</p>
      </div>
      
      <!-- 安全指标评分与模型计算 -->
      <div class="section">
        <h2>5 安全指标评分</h2>
        
        <table class="indicators-table">
          <thead>
            <tr>
              <th style="width: 60px;">序号</th>
              <th style="width: 200px;">指标名称</th>
              <th style="width: 100px;">指标值</th>
            </tr>
          </thead>
          <tbody>
            ${this.generateIndicatorsTableRows(indicators)}
          </tbody>
        </table>
        
        <p style="font-size: 11px; color: #6c757d; margin-top: 15px;">
          
        </p>
      </div>
    </div>`
  }

  /**
   * 生成整改建议表格行
   */
  private static generateRemediationTableRows(remediation: any[]): string {
    if (!remediation || remediation.length === 0) {
      return `
        <tr>
          <td>系统运行正常</td>
          <td>当前系统运行状态良好，各项指标均达到安全标准，建议继续保持现有管理水平。</td>
        </tr>
      `
    }
    
    // 按照分类组织整改建议
    const categorizedSuggestions = this.categorizeRemediationSuggestions(remediation)
    
    let html = ''
    
    // 人员因素
    if (categorizedSuggestions.personnel.length > 0) {
      html += `
        <tr>
          <td colspan="2" style="background: #f8f9fa; font-weight: bold; text-align: center;">（一）人员因素</td>
        </tr>
      `
      html += categorizedSuggestions.personnel.map((suggestion: any) => `
        <tr>
          <td>${suggestion['指标名称']}</td>
          <td>${suggestion['建议内容']}</td>
        </tr>
      `).join('')
    }
    
    // 设备因素
    if (categorizedSuggestions.equipment.length > 0) {
      html += `
        <tr>
          <td colspan="2" style="background: #f8f9fa; font-weight: bold; text-align: center;">（二）设备因素</td>
        </tr>
      `
      html += categorizedSuggestions.equipment.map((suggestion: any) => `
        <tr>
          <td>${suggestion['指标名称']}</td>
          <td>${suggestion['建议内容']}</td>
        </tr>
      `).join('')
    }
    
    // 环境因素
    if (categorizedSuggestions.environment.length > 0) {
      html += `
        <tr>
          <td colspan="2" style="background: #f8f9fa; font-weight: bold; text-align: center;">（三）环境因素</td>
        </tr>
      `
      html += categorizedSuggestions.environment.map((suggestion: any) => `
        <tr>
          <td>${suggestion['指标名称']}</td>
          <td>${suggestion['建议内容']}</td>
        </tr>
      `).join('')
    }
    
    // 管理因素
    if (categorizedSuggestions.management.length > 0) {
      html += `
        <tr>
          <td colspan="2" style="background: #f8f9fa; font-weight: bold; text-align: center;">（四）管理因素</td>
        </tr>
      `
      html += categorizedSuggestions.management.map((suggestion: any) => `
        <tr>
          <td>${suggestion['指标名称']}</td>
          <td>${suggestion['建议内容']}</td>
        </tr>
      `).join('')
    }
    
    return html
  }

  /**
   * 按照因素分类整改建议
   */
  private static categorizeRemediationSuggestions(remediation: any[]): {
    personnel: any[]
    equipment: any[]
    environment: any[]
    management: any[]
  } {
    const categories = {
      personnel: [] as any[],
      equipment: [] as any[],
      environment: [] as any[],
      management: [] as any[]
    }
    
    // 指标分类映射
    const indicatorCategories: { [key: string]: string } = {
      '管理人员的管理能力': 'personnel',
      '技术人员的技术素质': 'personnel',
      '工人安全意识与操作能力': 'personnel',
      '特殊岗位人员持证率': 'personnel',
      
      '支护设备完好率': 'equipment',
      '采掘设备完好率': 'equipment',
      '采掘机械化水平': 'equipment',
      '矿井通风设备完好率': 'equipment',
      '通风构筑物完好率': 'equipment',
      '瓦斯抽放设备完好率': 'equipment',
      '瓦斯监测设备完好率': 'equipment',
      '隔爆防爆设备完好率': 'equipment',
      '防火及消防设施完好率': 'equipment',
      '火灾监测装备完好率': 'equipment',
      '井下排水设备完好率': 'equipment',
      '探防水设备完好率': 'equipment',
      '运输设备完好率': 'equipment',
      '运输机械化水平': 'equipment',
      '矿井提升设备完好率': 'equipment',
      '供电系统保护装置完好率': 'equipment',
      '供电系统装备完好率': 'equipment',
      
      '风量供需比': 'environment',
      '顶板管理难易程度': 'environment',
      '矿井正常涌水量': 'environment',
      '煤层自燃发火倾向性': 'environment',
      '平均瓦斯涌出量': 'environment',
      
      '安全管理制度及落实率': 'management',
      '安全检查整改落实率': 'management',
      '安全检查技术人员配备率': 'management',
      '安全投入指数': 'management',
      '应急响应机制完善率': 'management',
      '作业人员培训及考核': 'management'
    }
    
    remediation.forEach(suggestion => {
      const indicatorName = suggestion['指标名称']
      const category = indicatorCategories[indicatorName] || 'management'
      
      if (categories[category as keyof typeof categories]) {
        categories[category as keyof typeof categories].push(suggestion)
      }
    })
    
    return categories
  }

  /**
   * 生成生产系统内容
   */
  private static generateProductionSystemsContent(productionSystems: any): string {
    if (!productionSystems) {
      return `
        <p><strong>开采系统</strong>：承担矿石开采任务，采用<u>机械化采煤</u>。主要设施包括<u>采掘机、掘进机、钻机、装载机等</u>，功能为<u>矿石开采及输送至提升运输系统</u>。系统监控与自动化情况<u>设备状态监控、自动报警或远程监控</u>，运行状态<u>稳定</u>，备注：<u>设备巡检和维护周期</u>。</p>
        
        <p><strong>通风系统</strong>采用<u>中央并列式通风</u>，配置<u>主扇、局扇、风门等</u>，其主要功能为<u>保证井下空气流通，有害气体稀释</u>。系统具备<u>风量监测与自动调节功能，可实时监控关键巷道风量等</u>，运行状态<u>稳定</u>，备注：<u>局部巷道需加强巡检</u>。</p>
        
        <p><strong>瓦斯防治系统</strong>采用<u>抽采+监测+通风协同等</u>，主要设施包括<u>瓦斯抽放钻孔、监控传感器、抽采管路等</u>，功能为<u>动态监控瓦斯浓度，超限预警</u>。系统监控与自动化情况<u>自动报警与通风调节</u>，运行状态<u>稳定</u>，备注：<u>抽采孔布置可优化</u>。</p>
        
        <p><strong>排水系统</strong>为<u>主泵房+局部泵站等</u>，主要设施包括<u>排水泵、管路等</u>，功能为<u>汇集排出井下涌水</u>。系统具备<u>自动启停、远程监控等</u>，运行状态<u>稳定</u>，备注：<u>局部管网易积水</u>。</p>
        
        <p><strong>提升运输系统</strong>采用<u>主提升+轨道运输等</u>，主要设施包括<u>电控提升机、钢丝绳容器、轨道运输系统等</u>，功能为<u>矿石、材料及人员运输</u>。系统监控与自动化情况<u>超载、超速保护装置完好</u>，运行状态<u>稳定</u>，备注：<u>钢丝绳定期检查</u>。</p>
        
        <p><strong>供电系统</strong>为<u>双回路供电</u>，主要设施包括<u>地面变电站、备用电源等</u>，功能为<u>保证关键设备及安全监测系统持续运行</u>。系统监控与自动化情况<u>电力监控及保护装置正常</u>，运行状态<u>稳定</u>，备注：<u>备用电源测试正常</u>。</p>
        
        <p><strong>防火防爆系统</strong>采用<u>气体监测+灭火+隔爆等</u>，主要设施包括<u>气体检测仪、灭火器材、隔爆设施、消防水管网等</u>，功能为<u>事故初期快速处置</u>。系统监控与自动化情况<u>防火防爆监控系统运行正常，可实现自动报警</u>，运行状态<u>稳定</u>，备注：<u>定期演练按计划进行</u>。</p>
      `
    }

    // 系统名称映射
    const systemNameMapping: { [key: string]: string } = {
      'mining_system': '开采系统',
      'ventilation_system': '通风系统',
      'gas_prevention_system': '瓦斯防治系统',
      'drainage_system': '排水系统',
      'hoisting_transport_system': '提升运输系统',
      'power_system': '供电系统',
      'fire_explosion_prevention_system': '防火防爆系统'
    }

    // 运行状态映射
    const statusMapping: { [key: string]: string } = {
      'normal': '稳定',
      'attention': '注意',
      'abnormal': '异常'
    }

    let content = ''
    
    // 按照固定顺序生成系统内容
    const systemOrder = [
      'mining_system',
      'ventilation_system', 
      'gas_prevention_system',
      'drainage_system',
      'hoisting_transport_system',
      'power_system',
      'fire_explosion_prevention_system'
    ]

    for (const systemKey of systemOrder) {
      const system = productionSystems[systemKey]
      if (system) {
        const systemName = systemNameMapping[systemKey] || system.system_name || '未知系统'
        const operationStatus = statusMapping[system.operation_status] || system.operation_status || '稳定'
        
        content += `
          <p><strong>${systemName}</strong>：承担<u>${system.function_description || '系统功能'}</u>任务，采用<u>${this.getSystemMethod(systemKey)}</u>。主要设施包括<u>${system.main_facilities || '主要设备'}</u>，功能为<u>${system.function_description || '系统功能'}</u>。系统监控与自动化情况<u>${this.getSystemAutomation(systemKey)}</u>，运行状态<u>${operationStatus}</u>，备注：<u>${system.safety_hazards || '系统运行正常'}</u>。</p>
        `
      }
    }

    return content
  }

  /**
   * 获取系统方法描述
   */
  private static getSystemMethod(systemKey: string): string {
    const methodMapping: { [key: string]: string } = {
      'mining_system': '机械化采煤',
      'ventilation_system': '中央并列式通风',
      'gas_prevention_system': '抽采+监测+通风协同',
      'drainage_system': '主泵房+局部泵站',
      'hoisting_transport_system': '主提升+轨道运输',
      'power_system': '双回路供电',
      'fire_explosion_prevention_system': '气体监测+灭火+隔爆'
    }
    return methodMapping[systemKey] || '标准配置'
  }

  /**
   * 获取系统自动化描述
   */
  private static getSystemAutomation(systemKey: string): string {
    const automationMapping: { [key: string]: string } = {
      'mining_system': '设备状态监控、自动报警或远程监控',
      'ventilation_system': '风量监测与自动调节功能，可实时监控关键巷道风量',
      'gas_prevention_system': '自动报警与通风调节',
      'drainage_system': '自动启停、远程监控',
      'hoisting_transport_system': '超载、超速保护装置完好',
      'power_system': '电力监控及保护装置正常',
      'fire_explosion_prevention_system': '防火防爆监控系统运行正常，可实现自动报警'
    }
    return automationMapping[systemKey] || '系统监控正常'
  }

  /**
   * 格式化安全等级显示
   * 直接使用数据库中的真实安全等级，不进行重新格式化
   */
  private static formatSafetyLevel(level: string): string {
    if (!level) return '待评估'
    
    // 直接返回数据库中的真实安全等级，确保与数据库存储一致
    // 数据库存储格式：A级(优秀)、B级(良好)、C级(一般)、D级(较差)
    return level
  }

  /**
   * 生成安全结论
   */
  private static generateSafetyConclusion(level: string, _score: number): string {
    if (!level) return '待评估'
    
    // 根据数据库中的真实安全等级格式进行判断
    if (level.includes('A级') || level.includes('优秀')) {
      return '总体健全，安全设施完善，安全管理水平优秀'
    } else if (level.includes('B级') || level.includes('良好')) {
      return '总体健全，安全设施基本符合标准要求，安全管理水平处于行业中上水平'
    } else if (level.includes('C级') || level.includes('一般')) {
      return '基本健全，但存在部分安全隐患，需要加强管理和整改'
    } else if (level.includes('D级') || level.includes('较差')) {
      return '存在较多安全隐患，需要立即进行整改和加强管理'
    }
    
    return '需要进一步评估'
  }

  /**
   * 生成安全建议
   */
  private static generateSafetyRecommendation(level: string): string {
    if (!level) return ''
    
    // 根据数据库中的真实安全等级格式进行判断
    if (level.includes('A级') || level.includes('优秀')) {
      return '建议企业继续保持现有管理水平，定期进行安全检查和评估。'
    } else if (level.includes('B级') || level.includes('良好')) {
      return '建议企业继续完善设备管理与通风系统维护，以进一步提升安全保障能力。'
    } else if (level.includes('C级') || level.includes('一般')) {
      return '建议企业立即制定整改计划，加强安全管理和设备维护，确保安全生产。'
    } else if (level.includes('D级') || level.includes('较差')) {
      return '建议企业立即停产整改，全面排查安全隐患，确保达到安全标准后方可恢复生产。'
    }
    
    return ''
  }

  /**
   * 生成安全指标评分表格行
   */
  private static generateIndicatorsTableRows(indicators: any[]): string {
    if (!indicators || indicators.length === 0) {
      // 返回默认的15个指标
      const defaultIndicators = [
        '管理人员管理能力',
        '技术人员技术素质', 
        '工人安全意识与操作能力',
        '特殊岗位人员持证率',
        '支护设备完好率',
        '采掘设备完好率',
        '采掘机械化水平',
        '矿井通风设备完好率',
        '通风构筑物完好率',
        '瓦斯抽放设备完好率',
        '瓦斯监测设备完好率',
        '隔爆防爆设备完好率',
        '防火及消防设施完好率',
        '火灾监测装备完好率',
        '井下排水设备完好率'
      ]
      
      return defaultIndicators.map((name, index) => `
        <tr>
          <td>${index + 1}</td>
          <td>${name}</td>
          <td><u>______</u></td>
        </tr>
      `).join('')
    }
    
    return indicators.map((indicator: any) => `
      <tr>
        <td>${indicator['序号']}</td>
        <td>${indicator['指标名称']}</td>
        <td><u>${indicator['指标值'] || '______'}</u></td>
      </tr>
    `).join('')
  }


  /**
   * 完整的报告导出流程
   * @param evaluationId 评价记录ID
   * @param options 导出选项
   */
  static async exportReport(evaluationId: number, options: ReportExportOptions = {}): Promise<void> {
    try {
      // 1. 生成报告数据
      const reportData = await this.generateReportData(evaluationId)
      
      // 2. 根据格式导出
      if (options.format === 'json') {
        this.exportToJSON(reportData, options.filename)
      } else {
        await this.exportToPDF(reportData, options)
      }
      
    } catch (error) {
      console.error('报告导出失败:', error)
      throw error
    }
  }

  /**
   * 生成测试报告数据（用于开发测试）
   * @returns 测试用的报告数据
   */
  static generateTestReportData(): ReportData {
    return {
      '报告基本信息': {
        '报告编号': 'REP20250109-001',
        '评价日期': '2025-01-09',
        '矿山名称': '示例XX矿山',
        '矿山类型': '煤矿',
        '所属区域': '山西省',
        '评价人': '张三'
      },
      '矿山基本信息': {
        '信息项': {
          '矿山编号': 'MINE001',
          '矿山名称': '示例XX矿山',
          '所属区域': '山西省',
          '联系人': '李四',
          '联系电话': '13800138000',
          '矿山类型': '煤矿',
          '备注': '测试矿山',
          '隶属企业': '示例矿业集团',
          '生产能力': '120',
          '服务年限': '25',
          '开拓方式': '斜井、立井',
          '运输方式': '电机车运输'
        }
      },
      '生产系统信息': {
        'mining_system': {
          'system_name': '开采系统',
          'function_description': '矿石开采',
          'main_facilities': '掘进机、采煤机',
          'operation_status': 'normal',
          'safety_hazards': '顶板监测需加强'
        },
        'ventilation_system': {
          'system_name': '通风系统',
          'function_description': '矿井通风',
          'main_facilities': '主扇风机、局部通风机',
          'operation_status': 'normal',
          'safety_hazards': '通风阻力较大'
        },
        'gas_prevention_system': {
          'system_name': '瓦斯防治系统',
          'function_description': '瓦斯监测与防治',
          'main_facilities': '瓦斯监测仪、抽放设备',
          'operation_status': 'normal',
          'safety_hazards': '监测点覆盖不全'
        },
        'drainage_system': {
          'system_name': '排水系统',
          'function_description': '矿井排水',
          'main_facilities': '主排水泵、水仓',
          'operation_status': 'normal',
          'safety_hazards': '排水能力需提升'
        },
        'hoisting_transport_system': {
          'system_name': '提升运输系统',
          'function_description': '物料提升运输',
          'main_facilities': '提升机、运输机',
          'operation_status': 'normal',
          'safety_hazards': '提升设备老化'
        },
        'power_system': {
          'system_name': '供电系统',
          'function_description': '矿井供电',
          'main_facilities': '变压器、配电柜',
          'operation_status': 'normal',
          'safety_hazards': '供电线路需检修'
        },
        'fire_explosion_prevention_system': {
          'system_name': '防火防爆系统',
          'function_description': '防火防爆',
          'main_facilities': '消防设备、防爆设备',
          'operation_status': 'normal',
          'safety_hazards': '消防设备配置不足'
        }
      },
      '安全指标评分与模型计算': [
        { '序号': 1, '指标名称': '管理人员管理能力', '指标值': 85, '权重': 0.15 },
        { '序号': 2, '指标名称': '技术人员技术素质', '指标值': 78, '权重': 0.12 },
        { '序号': 3, '指标名称': '工人安全意识与操作能力', '指标值': 82, '权重': 0.13 },
        { '序号': 4, '指标名称': '特殊岗位人员持证率', '指标值': 95, '权重': 0.10 },
        { '序号': 5, '指标名称': '支护设备完好率', '指标值': 88, '权重': 0.08 },
        { '序号': 6, '指标名称': '采掘设备完好率', '指标值': 90, '权重': 0.10 },
        { '序号': 7, '指标名称': '采掘机械化水平', '指标值': 85, '权重': 0.07 },
        { '序号': 8, '指标名称': '矿井通风设备完好率', '指标值': 92, '权重': 0.09 },
        { '序号': 9, '指标名称': '通风构筑物完好率', '指标值': 87, '权重': 0.06 },
        { '序号': 10, '指标名称': '瓦斯抽放设备完好率', '指标值': 89, '权重': 0.08 },
        { '序号': 11, '指标名称': '瓦斯监测设备完好率', '指标值': 94, '权重': 0.08 },
        { '序号': 12, '指标名称': '隔爆防爆设备完好率', '指标值': 91, '权重': 0.07 },
        { '序号': 13, '指标名称': '防火及消防设施完好率', '指标值': 86, '权重': 0.06 },
        { '序号': 14, '指标名称': '火灾监测装备完好率', '指标值': 93, '权重': 0.05 },
        { '序号': 15, '指标名称': '井下排水设备完好率', '指标值': 88, '权重': 0.07 }
      ],
      '安全等级判定': {
        '总体安全等级': 'B级(良好)',
        '综合得分': 82.5,
        '低分指标数量': 3,
        '建议整改指标': '技术人员技术素质、支护设备完好率、防火及消防设施完好率'
      },
      '整改建议': [
        {
          '指标名称': '技术人员技术素质',
          '建议内容': '系统显示技术人员技能不足。请组织专项技术培训和现场操作考核，提升技术人员在隐患识别、设备操作与应急处理能力。整改完成后请上传考核结果和培训记录。',
          '整改条件': '培训考核通过'
        },
        {
          '指标名称': '支护设备完好率',
          '建议内容': '支护设备存在损坏或老化。请对巷道、工作面支护进行检查与维护，及时更换损坏锚杆或钢带，并上传整改照片和检查记录。',
          '整改条件': '设备检查维护完成'
        },
        {
          '指标名称': '防火及消防设施完好率',
          '建议内容': '消防设施存在缺陷。请检查灭火器、喷淋系统、消防水源，并修复或更换损坏设备。整改完成后上传测试记录。',
          '整改条件': '消防设施测试通过'
        }
      ],
      '报告元数据': {
        '生成时间': '2025-01-09 10:30:00',
        '算法版本': 'AHP-MIV-BP v2.0',
        '报告格式': 'PDF',
        '数据来源': '现场调研+专家评分',
        '阈值设定': 'A级≥90分，B级80-89分，C级70-79分，D级<70分'
      }
    }
  }

  /**
   * 导出测试报告（用于开发测试）
   * @param options 导出选项
   */
  static async exportTestReport(options: ReportExportOptions = {}): Promise<void> {
    try {
      const testData = this.generateTestReportData()
      
      if (options.format === 'json') {
        this.exportToJSON(testData, options.filename)
      } else {
        await this.exportToPDF(testData, options)
      }
      
    } catch (error) {
      console.error('测试报告导出失败:', error)
      throw error
    }
  }

  /**
   * 预览报告HTML（用于调试）
   * @param reportData 报告数据
   * @returns HTML字符串
   */
  static previewReportHTML(reportData: ReportData): string {
    return this.generateCompleteHTMLDocument(reportData)
  }

  /**
   * 在新窗口中预览报告（用于调试）
   * @param reportData 报告数据
   */
  static previewReportInNewWindow(reportData: ReportData): void {
    const fullHtmlDocument = this.generateCompleteHTMLDocument(reportData)
    
    if (!this.validateHTMLDocument(fullHtmlDocument)) {
      throw new Error('生成的HTML文档格式不正确')
    }
    
    const newWindow = window.open('', '_blank', 'width=800,height=600')
    if (!newWindow) {
      throw new Error('无法打开新窗口，请检查浏览器弹窗设置')
    }
    
    newWindow.document.write(fullHtmlDocument)
    newWindow.document.close()
    
    console.log('报告预览窗口已打开')
  }
}

// 导出便捷函数
export const exportReport = ReportService.exportReport
export const generateReportData = ReportService.generateReportData
export const exportToPDF = ReportService.exportToPDF
export const exportToPDFFallback = ReportService.exportToPDFFallback
export const exportToJSON = ReportService.exportToJSON
export const generateTestReportData = ReportService.generateTestReportData
export const exportTestReport = ReportService.exportTestReport
export const previewReportHTML = ReportService.previewReportHTML
export const previewReportInNewWindow = ReportService.previewReportInNewWindow

